<?php
/**
 * @author zyb
 * @todo 上传文件管理，编辑器上传管理，附件数据管理,分类图标不在此管理
 * */
class attachmentAction extends backendAction
{
	/**
	 * @todo 初始化配置,底层基类已重写
	 * */
	protected $up_img_path='';
    public function _initialize() {
        parent::_initialize();
        $this->_up_img_path='./'.C('zyb_attach_path');
        $this->assign('up_img_path',$this->_up_img_path);
    }

	/**
	 * @todo 初始化配置,底层基类已重写
	 * */
    protected function _upload_init($upload) {
        $file_type = empty($_GET['dir']) ? 'images' : trim($_GET['dir']);
        $ext_arr = array(
            'image' => explode(',', C('zyb_attr_allow_exts')),
            'flash' => array('swf', 'flv'),
            'media' => array('swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'),
            'file' => array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2'),
        );
        $allow_exts_conf = explode(',', C('zyb_attr_allow_exts')); // 读取配置
        $allow_max = C('zyb_attr_allow_size'); // 读取配置
        $allow_exts = array_intersect($ext_arr[$file_type], $allow_exts_conf);   //和总配置取交集
        $allow_max && $upload->maxSize = $allow_max * 1024;   //文件大小限制
        $allow_exts && $upload->allowExts = $allow_exts;  //文件类型限制
        $upload->savePath = $this->_up_img_path. $file_type . '/'  ;
        $upload->saveRule = 'uniqid';
        $upload->autoSub = true;
        $upload->subType = 'date';
        $upload->dateFormat = 'Y-m-d';  //生成目录格式名字
        return $upload;
    }
     /**
      * @param string img 图片地址
      * @param bool  iswater 是否水印
      * @param config
      * */
    private function water_pic($img,$iswater){
         if(C('zyb_is_water')&&$iswater){ //开启后生成水印
		       import("@.ORG.Image");//加载org.image类库
		        //给缩略图添加水印, Image::water('原文件名','水印图片地址')
		       $bg='./static/frontend/images/bearn.png';  //水印位置原图
		       if($bg)Image::water('./'.$img,$bg);
	        }
    }
	public function _upload_sumb($thumbmod,$more){
		$thumb=array();
		if($more){
			//多图上传切割图片尺寸为
			$w=C('zyb_imgsize.'.$this->_name.'_imglist_w');
			$h=C('zyb_imgsize.'.$this->_name.'_imglist_h');
		}else{
			$w=C('zyb_imgsize.'.$thumbmod.'_w');
			$h=C('zyb_imgsize.'.$thumbmod.'_h');
		}

		if($w){
			//进行切割
			$thumb=array('width'=>$w, 'height'=>$h, 'remove_origin'=>true);
		}
		$result = $this->_upload($_FILES['img'], '', $thumb);
		if($w){
			//切割才修改文件名
	        $ext = @array_pop(explode('.', $result['info'][0]['savename']));
	        $result['info'][0]['savename'] = str_replace('.' . $ext, '_thumb.' . $ext, $result['info'][0]['savename']);
		}
        if ($result['error']) {
              exit("0," . $result['info']);
        } else {
            $result['allimg'] =$this->_up_img_path.'images/' . $result['info'][0]['savename'];
        }
        return $result;
	}

  /**
    * @param $_FILES 文件原件
    * @param string upmodule  上传模型
    * @todo 上传图片,处理，保存入数据库
    * **/
    public function add(){
          if (IS_POST) {
          	//模块
          	 $upmod=$this->_post('upmodule','trim');
          	 //切割图片的尺寸
          	 $thumbmod=$this->_post('thumb','trim');
			//判断多图上传标志
          	 $more=$this->_post('more','trim');

            //上传图片
	        if (!empty($_FILES['img']['name'])) {
	        	$result=$this->_upload_sumb($thumbmod,$more);
	        }
	        //文件名称
	       $imgname=str_replace(date('Y-m-d').'/','',$result['info'][0]['savename']);
	       $upid=M('attachment')->add(array(
	          'module'=>$upmod,  //取得模块名称
	          'userid'=>$_SESSION['admin']['id'],//用户ID
	          'isadmin'=>1,
	          'uploadtime'=>time(),
	          'status'=>0, //表示是否引用
	          'isimage'=>1,
	          'isthumb'=>0, //是否是缩略图
	          'fileext'=> $result['info'][0]['extension'],
	          'filesize'=>'',
	          'filepath'=>$result['info'][0]['savename'],
	          'filename'=>$imgname,
	          'setmod'=>'',
	        ));
	        //处理水印
	         $this->water_pic($result['allimg'],$this->_post('watermark_enable','intval',0));
             echo $upid.",".$result['allimg'].",1,".$result['info'][0]['savename'];
        } else {
    	        $num=$this->_get('num','intval',1);
    	        $param=$this->_get('param','trim');  //判断上传组件input id
    	        $module=$this->_get('module','trim');  //判断同步状态
    	        $more=$this->_get('more','trim');  //判断同步状态

    	        //上传格式显示
	            $this->assign("file_types",C('zyb_attr_allow_img_exts'));
	            $this->assign("file_size_limit",C('zyb_attr_allow_img_size'));
	            $this->assign("file_upload_limit",$num);
	            $this->assign('param',$param);
	            $this->assign('module',$module);
         	    $response = $this->fetch('attachment:ajax_add');
         	    $this->ajaxReturn(1, '', $response);
           }
    }
    /**
     * @param int id 文件ID
     * @todo 删除文件
     * **/
    public  function delImg(){
          $id=$this->_get('id','intval');
          $file=$this->_up_img_path.'images/' .M('attachment')->where(array('id'=>$id))->getField('filepath');
          @unlink($file);
          $rs=M('attachment')->where(array('id'=>$id))->delete();
          if($rs){
          	$this->ajaxReturn(1,'操作成功');
          }else{
            $this->ajaxReturn(0,'操作失败');
          }
    }

    /**
     * @todo 编辑内容删除图片
     * @param more 多图表标志
     * @param module模块
     * @param param图片字段
     * @param inputv图片字段值
     * **/
    public  function edit_delImg(){
    	  $more =$_REQUEST["more"];
    	  $module=$_REQUEST["module"];
    	  $param =$_REQUEST["param"];
    	  $inputv=$_REQUEST["inputv"];
    	  $id=$_REQUEST["id"];
    	  if(empty($inputv)){
    	  	$this->ajaxReturn(0,'操作失败');
    	  }
    	  //多图表
    	  if($more==1){
    	  	$temp=D($module.'_img')->where(array('imglist'=>$inputv))->getField('id');
    	  	if (false === strpos($inputv, 'http://')) {
		        $oimg=$this->_up_img_path.'images/' .$inputv;
	  		    if(is_file($oimg)){
					  $dt=M("attachment")->where(array('filepath'=>$inputv))->getField('setmod');
		    	  	  $dt&&$setmod=str_replace($module.'_m_'.$temp.',','',$dt);
		    	  	  $sdata['setmod']=$setmod;
		    	  	  $setmod==''&&$sdata['status']=0;
		    	  	  M("attachment")->where(array('filepath'=>$inputv))->save($sdata);
		    	  	  $rs=D($module.'_img')->where(array('tid'=>$id,'id'=>$temp))->delete();
		  	    }
    	  	}else{
    	  		//直接引用的图片
				$rs=D($module.'_img')->where(array('tid'=>$id,'id'=>$temp))->delete();
    	  	}
    	  }else{
    	  	//记录里的字段
    	  	$imgs=explode('_',$param);
    	  	if (false === strpos($inputv, 'http://')) {
		        $oimg=$this->_up_img_path.'images/' .$inputv;
	  		    if(is_file($oimg)){
					  $dt=M("attachment")->where(array('filepath'=>$inputv))->getField('setmod');
					  //避免表中_该字符 图片字段取最后一个数组
				  	  $dt&&$setmod=str_replace($module.$imgs[count($imgs)-1].'_'.$id.',','',$dt);
				  	  $sdata['setmod']=$setmod;
				  	  $setmod==''&&$sdata['status']=0;
				  	  M("attachment")->where(array('filepath'=>$inputv))->save($sdata);
				  	  $rs=D($module)->where(array('id'=>$id))->save(array($imgs[count($imgs)-1]=>''));
		  	    }else{
		  	    	//如果本地图片已删除，直接修改数据库
		  	    	$rs=D($module)->where(array('id'=>$id,$imgs[count($imgs)-1]=>$inputv))->save(array($imgs[count($imgs)-1]=>''));
		  	    }
    	  	}else{
    	  		//直接引用的图片
				$rs=D($module)->where(array('id'=>$id))->save(array($imgs[count($imgs)-1]=>''));
    	  	}
    	  }
          if($rs){
          	$this->ajaxReturn(1,'操作成功');
          }else{
            $this->ajaxReturn(0,'操作失败');
          }
    }

     /**
      * @param string filename 上传文件名
      * @param string param  上传表单对应输入域
     *  @todo  加载图片库
     */
    public function filelist() {
        $where = array();
        $mod = M("attachment");
        $filename = $this->_get("filename");  //上传文件名
        //判断文件是否用过
        $status=$this->_get('status','intval',1);
        $param=$this->_get('param','trim');  //判断上传组件input id
        $module=$this->_get('module','trim');  //上传对应模块
        //获取模型
        empty($filename) ? "" : $where['filename'] = array('like', '%' . $filename . '%');
        $where['status']=$status;
        $where['module']=$module;
        $where['isimage'] =1;
        $where['isadmin'] =1;//只查询后台上传的
        ($time_start = $this->_get('start_time', 'trim')) && $where['uploadtime'][] = array('egt', strtotime($time_start));
        ($time_end = $this->_get('end_time', 'trim')) &&  $where['uploadtime'][] = array('elt', strtotime($time_end)+(24*60*60-1));
        $count = $mod->where($where)->count();
        //启用分页
        $page = $this->_pager($count, 18);
        $data = $mod->where($where)->order('id desc')->limit($page->firstRow . ',' . $page->listRows)->select();

        $this->assign("page", $page->show());
        $this->assign("data", $data);
         $this->assign('param',$param);
         $this->assign('status',$status);
        $this->assign("file_upload_limit",1);
        $this->display();
    }

   /**
    * @param string id 文件路径，唯一
    * @todo 剪切图片第一步，判断加载
    * **/
    public function cutimage(){
        $id=$this->_get('id');
        !$id&&$this->ajaxReturn(0,'请先选择图片');
        $info=M("attachment")->where(array('filepath'=>$id))->find();
        !$info&&$this->ajaxReturn(0,'图片已丢失');
        $uploadid=$this->_get('uploadid','trim');
        $this->assign('uploadid',$$uploadid);
        $this->assign('id',$info['id']);
        $data=$this->fetch();
        $this->ajaxReturn(1,'',$data);
    }

    /**
     * @param int id 文件ID
     * @todo 第二步,swf插件加载
     * **/
    public function viewcutimg(){
        $id=$this->_get('id','intval');
        $info=M("attachment")->where(array('id'=>$id))->find();
        $uploadid=$this->_get('uploadid','trim');
        $this->assign('uploadid',$$uploadid);
        $this->assign('info',$info);
        $this->display();
    }

    /**
     * @param string file 上传文件名
     * @todo 第三步,数据图片保存
     * **/
    public function cutdo(){
          $pic = $GLOBALS["HTTP_RAW_POST_DATA"];
          $file=$this->_get('file','trim');
          file_put_contents('./'.$file,$pic);
          echo $file;exit();
    }

    /**
     * @param int id 文件id
     * @param string setmod 变量模型
     * @param string module　对应模块
     * @todo 同步状态
     * */
   public function svnstatus(){
   	  $id=$this->_get('id','intval');
   	  $setmod=$this->_get('setmod','trim'); //判断同步变量
   	  $module=$this->_get('module','trim');  //判断同步模型
   	  //去掉已选同步
   	  $this->ajaxReturn(1);
   }


}